#ifndef HASH_MAP_H
#define HASH_MAP_H

#include <stdint.h> // 包含它是为了使用别名uint32_t
#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include "my_header.h"
#include "canalysis_hash.h"
#define HASHMAP_CAPACITY 50 // 哈希表中数组的长度固定是10

// 此时哈希表用于存储字符串类型的键值对
typedef const char* KeyType_netfd;
/* typedef Canalysis_t* ValueType; */
/* typedef int* KeyType; */
typedef int ValueType_netfd;

// 键值对结点
typedef struct hashnode_s {
    KeyType_netfd key;
    ValueType_netfd val;
    //散列偏移？
    //int offset;
    struct hashnode_s* next;
} Netfd_KeyValueNode;

typedef struct {
    // 哈希桶
    Netfd_KeyValueNode* buckets[HASHMAP_CAPACITY];    // 直接给定哈希桶的数量是10个

    int length;

    // 哈希函数需要的种子值
    uint32_t hash_seed;
} Netfd_HashMap;

// 创建一个固定容量的哈希表
Netfd_HashMap* hashmap_netfd_create();
// 销毁一个哈希表
void hashmap_netfd_destroy(Netfd_HashMap* map);
// 插入一个键值对
ValueType_netfd hashmap_netfd_put(Netfd_HashMap* map, KeyType_netfd key, ValueType_netfd val);
// 查询一个键值对
ValueType_netfd hashmap_netfd_get(Netfd_HashMap* map, KeyType_netfd key);
// 删除某个键值对
int hashmap_netfd_remove(Netfd_HashMap* map, KeyType_netfd key);

int print_netfd_hashmap(Netfd_HashMap* map);

int hashmap_netfd_remove_all(Netfd_HashMap* map,int* idx_fd);
//哈希函数
/* static uint32_t hash(const void* key, int len, uint32_t seed); */


#endif // !HASH_MAP_H
